package com.zhiy.com.estation.wigdet;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;

import android.graphics.Paint;
import android.graphics.Path;

import android.graphics.Region;

import android.util.AttributeSet;
import android.view.View;

import com.zhiy.com.estation.R;


/**
 * 这里我们继承ImageView
 * Created by Zyh on 2016/11/27.
 */
public class MyCycleImageView extends View {
    /**
     *方法的作用：
     * 构造方法--主要进行变量的初始化
     * onMeasure---主要对该控件的宽高进行重置
     * onDraw---对需要显示的信息进行重绘
     * 我们需要用到的工具：
     * 1.画笔
     * 2.位图
     * 3.绘制的path路线
     * 4.画布，这个有系统提供
     * 
     */
    private Bitmap mBitmap;
    private Paint mPaint;
    private Path mPath;
    private int dia;//显示的直径
    public MyCycleImageView(Context context, AttributeSet attrs) {
        //这个方法是系统默认要执行的方法
        super(context, attrs);
        mPaint=new Paint();
        //设置抗锯齿
        mPaint.setAntiAlias(true);
        mPaint.setStyle(Paint.Style.STROKE);
        //设置画笔透明
        mPaint.setAlpha(0);
        mPath=new Path();
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //重新规定布局的宽和高
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //图片的直径我们规定为宽高中最小的那个尺寸
        dia=Math.min(MeasureSpec.getSize(widthMeasureSpec),MeasureSpec.getSize(heightMeasureSpec));
        //按比例创建位图
        //设置路径为直径是dia的圆
        mPath.addCircle(dia/2,dia/2,dia/2, Path.Direction.CW);
        //这个方法是重新定义宽高的时候必须要执行的方法，否则会有异常
        setMeasuredDimension(dia,dia);
    }
    @Override
    protected void onDraw(Canvas canvas) {
         //重新绘制控件
         super.onDraw(canvas);
         //绘制圆形的区域--可以为我们位图描边
         canvas.drawPath(mPath,mPaint);
         //按照路径裁剪画布，裁剪剩下的区域我们设置为交集
         canvas.clipPath(mPath, Region.Op.INTERSECT);
        if (mBitmap!=null){
            setBitmap(mBitmap);
            canvas.drawBitmap(mBitmap,0,0,null);
        }
    }
    public void setBitmap(Bitmap bitmap){
        this.mBitmap=bitmap;
        mBitmap=Bitmap.createScaledBitmap(bitmap,dia,dia,false);
        invalidate();
    }

}